纯干货!Prompt链式方法总结,灵活驾驭各种大模型!
点击上方“AINLPer“,设为星标
引言
之前,写了一篇关于大型语言模型Prompt应用的文章[纯干货!最全Prompt工程方法总结,与ChatGPT、GPT-4等LLMs的交互更高效!],其中主要是让大家能够更加全面的了解Prompt工程,以及如何应用Prompt来引导大型语言模型LLMs完成任务。但是之前的文章主要介绍应用单个Prompt来完成特定的任务。然而,当面对复杂任务的时,单一的Prompt是不够的,我们需要将Prompt链接在一起才能完成。今天这篇文章主要集中在Prompt链式方法介绍用于实现复杂任务生成,其中主要包括:顺序Prompt链、并行Prompt链、抽样Prompt链、树状Prompt链、循环Prompt链。
顺序Prompt方法
按顺序的方法是链接Prompt最常见的方法。其关键思想是:当单个提示中提供的任务变得太长或太复杂并且包含许多不同的指令,则响应可能无法捕获所需的细节和粒度。在这种情况下,可以将该任务分解为多个子任务。一个子任务的响应会成为另外一个子任务的Prompt,按照顺序走下去直到任务完成。如下图所示:
此外,一开始的时候我们不想编写所有的细节,而是希望模型替我们生成。我们想要提供的只是我们想要的故事内容的简短摘要,这也是我们唯一的Prompt。下图总结了生成最终对话框所涉及的链。首先,人类输入故事摘要,该摘要将成为生成角色列表的提示,然后该列表将成为生成故事节拍的提示,依此类推,直到我们进入对话生成阶段。
并行Prompt方法
当子任务相互依赖时,需要顺序Prompt链。但是当它们独立时,我们可以并行运行它们,然后将结果进行组合。如下图所示:
Prompt={“帮我生成一份快捷简单的7天菜谱,并以Json的形式输出,其中key为“食材成分”和“制作说明””}
接下来,将在所有菜谱中重复生成食谱。一旦完成,我们可以将每顿饭的食材合并成一个用户可以立即使用的购物清单。
Prompt={“根据“食材成分”将食材合并成一个单一的购物清单,不要重复。”}
抽样Prompt方法
如果一项任务涉及逻辑推理,例如数学问答,则可能有不止一种方法来解决给定问题。在这种情况下,我们希望鼓励模型在探索不同的解决方案时更具创造性。但提高模型创造力(即提高“temperature”)也意味着模型得到错误答案的可能性也会提高。
解决方案是,可以重复多次向模型Prompt相同的问题,然后选择大多数人的回答。具体如下图所示:
凭借自我一致性,我们可以通过从多个路径进行采样来构建思想链方法。我们还通过将设置调整为更具“创意”,再次使用“temperature”等设置,使路径更加多样化,然后我们对所有答案进行多数投票。
下图说明了自我一致性的概念。它展示了一个比较使用贪婪解码方法的单个解决方案的结果和使用更多样化的解码方法的多代采样解决方案的结果的示例。前者没有得到正确的答案,而后者却得到了正确的答案。
树状Prompt链
树状Prompt链,其实就时思维树(ToT)。在之前的链式模式的基础上,当问题更加复杂并且需要更细粒度的推理步骤时,将步骤分解成多个部分会很有帮助。在每一步中,我们鼓励模型探索不同的解决方案,投票选出最佳解决方案,然后继续下一步。这在故事写作等创意应用中也很有用。相比将模型限制在单一路径,让模型探索不同的故事想法更有趣,从而提高最终输出的质量。
循环Prompt链
在某些应用程序中,考虑到后续步骤中发生的情况,我们可能需要重新运行生成步骤。一个例子是,后续步骤用于检查生成的响应是否满足特定标准,例如质量和格式。这就是循环模式有用的地方。
Prompt链性能考虑
Prompt链是一个非常强大的概念,当单个Prompt设置不足时,它可以使复杂的用例成为可能。话虽如此,Prompt链只有在真正必要的场景时才应该考虑它的应用,因为它有性能的限制。
其中一项考虑因素是延迟。链条越长,完成任务从开始到结束所需的时间就越长。如果应用程序对延迟敏感,则尽可能减少链的数量是有意义的。在设计依赖于提示链的应用程序时,成本因素是另一个考虑因素。
总结
综上,本文介绍了几种Prompt链,其中包括:顺序Prompt链、并行Prompt链、抽样Prompt链、树状Prompt链、循环Prompt链,它们在实际应用中能够很大的发挥出LLMs的能力,为解决复杂问题提供了很大创造空间,尽管在性能方面需要做一定的权衡,但是做好功能和性能的调整也是一项很有意义的挑战。
推荐阅读
[4]ACL2023|知识图谱(KG)检索新框架--DiFaR
[6]Goat-7B干翻GPT-4,超PaLM-540B!24G可训练